import { hex_md5 } from './md5';
import { ticket } from '@/constants/system-config';
const version = require('../../package.json').version;

// 免登录白名单
const LOGIN_FREE_WHITELIST = [
  '/api/v1/wechat/applet/get_openid',
  '/api/v1/wechat/applet/login',
  '/api/v1/wechat/applet/bind_phone',
  '/user/getOpenId',
  '/user/scanCode',
  '/user/register',
  '/user/checkOpenId',
  '/user/login',
];

export function https(config) {
  // 检查缓存中是否有token
  let token = uni.getStorageSync('token') || '';
  // 设置请求头
  config.header = {
    'content-type': 'application/json',
    version,
  };
  // 不是免登录的接口，需要在header上加上 Authorization = token 字段
  if (!LOGIN_FREE_WHITELIST.includes(config.url)) {
    config.header.Authorization = token || '';
  }
  if (config.method === 'POST') {
    let str = ticket;
    if (config.data) {
      str += JSON.stringify(config.data);
    }
    config.header.Sign = hex_md5(str);
  }

  let domain = process.env.VUE_APP_BASE_API;
  if (process.env.APP_ENV === 'mock') {
    domain = 'http://8.142.23.157:3001/mock/13';
  }
  config.url = domain + config.url;
  return new Promise((resolve, reject) => {
    if (config.showLoading) {
      uni.showLoading({
        title: '加载中...',
      });
    }
    uni
      .request({
        ...config,
        timeout: '100000',
      })
      .then(res => {
        if (config.showLoading) {
          uni.hideLoading();
        }
        console.log('uni.request的url', config.url);
        console.log('uni.request的config和原始返回值res', { config, res });
        if (res[0]) {
          reject(res);
        } else {
          // error 为 1001000 则表示用户未登录,跳转到登录页面
          if (res[1].data.error === 1001000 || [630, 613, 614, 615, 616].includes(res[1].data.result)) {
            uni.clearStorageSync();

            // TODO: 跳转登录页面的逻辑注释掉，暂时不用了
            // if (!getApp().globalData.isGoLogin) {
            //   getApp().globalData.isGoLogin = true;

            //   // 获取当前页面的路径
            //   const pages = getCurrentPages();
            //   const lastPagePath =
            //     pages[pages.length - 1] && pages[pages.length - 1].$page && pages[pages.length - 1].$page.fullPath;
            //   console.log('lastPagePath', lastPagePath);

            //   // 排除登录页面
            //   const returnUrl = lastPagePath.startsWith('/pages/login/login') ? '' : encodeURIComponent(lastPagePath);
            //   const loginUrl = returnUrl ? `/pages/login/login?returnUrl=${returnUrl}` : '/pages/login/login';

            //   return uni.navigateTo({
            //     url: loginUrl,
            //   });
            // }
            // uni.showToast({
            //   title: res[1].data.msg || '未登录',
            //   icon: 'error',
            //   duration: 2000,
            // });
            return reject(res[1].data);
          }
          if ('error' in res[1].data) {
            if (res[1].data.error == 0) {
              resolve(res[1].data.data);
            } else {
              reject(res[1].data);
            }
          } else {
            resolve(res[1].data);
          }
        }
      })
      .catch(error => {
        if (config.showLoading) {
          uni.hideLoading();
        }
        reject(error);
      });
  });
}
